/*
 * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "arkoala_api_generated.h"
#include "core/components_ng/base/frame_node.h"
#include "core/components_ng/pattern/search/search_model_static.h"
#include "core/components_ng/pattern/search/search_model_ng.h"
#include "core/interfaces/native/utility/callback_helper.h"
#include "core/interfaces/native/utility/converter.h"
#include "core/interfaces/native/utility/reverse_converter.h"

namespace OHOS::Ace::NG::GeneratedModifier {
namespace SearchOpsAccessor {
Ark_NativePointer RegisterSearchValueCallbackImpl(Ark_NativePointer node,
                                                  const Ark_String* value,
                                                  const SearchValueCallback* callback)
{
    auto frameNode = reinterpret_cast<FrameNode *>(node);
    CHECK_NULL_RETURN(frameNode && value && callback, nullptr);
    auto text = Converter::Convert<std::string>(*value);
    SearchModelNG::SetTextValue(frameNode, text);

    auto onEvent = [arkCallback = CallbackHelper(*callback)](const std::u16string& content) {
        Converter::ConvContext ctx;
        auto arkContent = Converter::ArkValue<Ark_String>(content, &ctx);
        arkCallback.Invoke(arkContent);
    };
    SearchModelStatic::SetOnChangeEvent(frameNode, std::move(onEvent));
    return node;
}
} // SearchOpsAccessor
const GENERATED_ArkUISearchOpsAccessor* GetSearchOpsAccessor()
{
    static const GENERATED_ArkUISearchOpsAccessor SearchOpsAccessorImpl {
        SearchOpsAccessor::RegisterSearchValueCallbackImpl,
    };
    return &SearchOpsAccessorImpl;
}

}
